package flex.cc.uac.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import flex.cc.base.dto.LoginAuthDto;
import flex.cc.system.vo.DictOptionVo;
import flex.cc.uac.dto.BindUserRolesDto;
import flex.cc.uac.dto.menu.UserMenuDto;
import flex.cc.uac.entity.UacLogEntity;
import flex.cc.uac.entity.UacUserEntity;
import flex.cc.uac.vo.UserBindRoleVo;
import flex.cc.uac.vo.UserInfoVo;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * 用户信息表
 *
 * @author zhangzk
 * @email zhangzhikai@sinosoft.com.cn
 * @date 2020-06-03 18:23:45
 */
public interface UacUserService extends IService<UacUserEntity> {

    /**
     * 根据登录名查询用户信息
     *
     * @param loginName the login name
     *
     * @return the uac user
     */
    UacUserEntity findByLoginName(String loginName);

    /**
     * 根据用户ID查询用户信息.
     *
     * @param userId the user id
     *
     * @return the uac user
     */
    UacUserEntity findUserInfoByUserId(Long userId);


    /**
     * 更新用户信息
     * @param uacUser
     * @return
     */
    boolean updateUser(UacUserEntity uacUser);

    /**
     * 获取用户拥有的所有权限编码.
     *
     * @param userId the user id
     *
     * @return the collection

    Collection<GrantedAuthority> loadUserAuthorities(Long userId); */

    /**
     * 处理登陆数据
     * @param token
     * @param userInfoMap
     * @param request
     */
    void handlerLoginData(String token, Map<String,String> userInfoMap, final HttpServletRequest request);

    /**
     * 分页查询用户
     * @param uacUser
     * @return
     */
    IPage<UacUserEntity> queryUserListWithPage(UacUserEntity uacUser);

    /**
     * 保存用户
     * @param uacUser
     * @param loginAuthDto
     */
    void saveUacUser(UacUserEntity uacUser, LoginAuthDto loginAuthDto);

    /**
     * 根据用户ID分页查询用户日志集合
     * @param userId
     * @return
     */
    IPage<UacLogEntity> queryUserLogListWithPage(Long userId, Integer pageNum, Integer pageSize);

    /**
     * 根据用户ID修改用户状态
     * @param uacUser
     * @param loginAuthDto
     * @return
     */
    boolean modifyUserStatusById(UacUserEntity uacUser, LoginAuthDto loginAuthDto);

    /**
     * 获取绑定的角色信息.
     * @param userId
     * @return
     */
    UserBindRoleVo getUserBindRoleDto(Long userId);

    /**
     * 绑定用户角色信息
     * @param bindUserRolesDto
     * @param loginAuthDto
     */
    void bindUserRoles(BindUserRolesDto bindUserRolesDto, LoginAuthDto loginAuthDto);

    /**
     * 查询用户菜单.

    List<UserMenuDto> queryUserMenuDtoData(LoginAuthDto loginAuthDto);
     */

    UacUserEntity queryByUserId(Long userId) ;

    void resetLoginPwd(Long userId, LoginAuthDto loginAuthDto);

    void batchResetLoginPwd(List<Long> userIds, LoginAuthDto loginAuthDto);

	List<UserMenuDto> queryUserMenuDtoData(LoginAuthDto loginAuthDto);

    public UserInfoVo queryUserInfoById(Long userId);

    /**
     * 查询用户下拉列表
     * @param userType：用户类别
     * @param upperVal：归属的上级，级联显示时会用到
     * @param belongFlag：是否考虑用户的归属机构
     * @param loginAuthDto：登录信息
     * @return
     */
    public List<DictOptionVo> getSelectOptions(String userType, String upperVal, String belongFlag, LoginAuthDto loginAuthDto);

}

